#include <AVUITAnimation.h>
#include <AVUIRotation3D.h>

namespace AVUI {

class Rotation3DAnimation : public TReferenceAnimation<Rotation3D>
{
public:

    Rotation3DAnimation();

    DECLARE_ELEMENT(Rotation3DAnimation, AnimationTimeline);

    DECLARE_DEPENDENCY_PROPERTY(By);
    Rotation3D* get_By() { return (Rotation3D*)(Object*)GetValue(get_ByProperty()); }
    void set_By(Rotation3D* pValue) { SetValue(get_ByProperty(), (Object*)pValue); } 

    DECLARE_DEPENDENCY_PROPERTY(From);
    Rotation3D* get_From() { return (Rotation3D*)(Object*)GetValue(get_FromProperty()); }
    void set_From(Rotation3D* pValue) { SetValue(get_FromProperty(), (Object*)pValue); } 

    DECLARE_DEPENDENCY_PROPERTY(To);
    Rotation3D* get_To() { return (Rotation3D*)(Object*)GetValue(get_ToProperty()); }
    void set_To(Rotation3D* pValue) { SetValue(get_ToProperty(), (Object*)pValue); } 

    bool get_IsAdditive() { return AVUI::UnboxValue< bool >(GetValue(get_IsAdditiveProperty())); }
    void set_IsAdditive(bool value) { SetValue(get_IsAdditiveProperty(), AVUI::BoxValue(value)); } 

    bool get_IsCumulative() { return AVUI::UnboxValue< bool >(GetValue(get_IsCumulativeProperty())); }
    void set_IsCumulative(bool value) { SetValue(get_IsCumulativeProperty(), AVUI::BoxValue(value)); } 

private:
    static void StaticConstructor();

};

typedef TRefCountedPtr<Rotation3DAnimation> Rotation3DAnimationPtr;

}; // namespace AVUI
